const http = require('http')
const url = require("url");
const {
    readFileSync
} = require('fs')
const {
    resolve
} = require('path')
// const data =[
//     {
//         "id": 1,
//         "name": "黄芪"
//     },
//     {
//         "id": 2,
//         "name": "当归"
//     },
//     {
//         "id": 3,
//         "name": "红参"
//     },
//     {
//         "id": 4,
//         "name": "西洋参"
//     },
//     {
//         "id": 5,
//         "name": "合欢皮"
//     },
//     {
//         "id": 6,
//         "name": "徐长卿"
//     },
//     {
//         "id": 7,
//         "name": "黄芪"
//     },
//     {
//         "id": 8,
//         "name": "麦冬"
//     },
//     {
//         "id": 9,
//         "name": "桑叶"
//     },
//     {
//         "id": 10,
//         "name": "夏枯草"
//     },
// ]

const app = http.createServer((req, res) => {
    // 跨域设置
    res.setHeader("Access-Control-Allow-Origin", '*');
    res.setHeader("Access-Control-Allow-Method", 'GET, POST');
    res.setHeader("Access-Control-Allow-Headers", 'Content-Type');


    const { pathname, query } = url.parse(req.url)

    if(req.method === 'GET'){
        switch (pathname) {
            case '/list':
                const { pn, ps } = dealQuery(query);
                const startIndex = (pn  -1) * ps;
                const data = JSON.parse(readFileSync(resolve(__dirname, 'data.json'), 'utf8'));
                const curData = data.slice(startIndex, startIndex + (+ps));
                res.writeHead(200, { 'Content-Type': 'application/json' });
                res.write(JSON.stringify(curData));
                break
            case '/':
                // 服务端渲染
                const template = readFileSync(resolve(__dirname, 'index.html'), 'utf8');
                const tempData = JSON.parse(readFileSync(resolve(__dirname,'data.json'), 'utf8'))

                const htmlStr = template.replace('<!--dom-->', () => {
                    return `
                    <ul>
                    ${
                        tempData.map(item => (
                            `<li> ${ item.name } </li>`
                        )).join('')
                    }
                    </ul>
                    `
                });
                res.writeHead(200, { 'Content-Type': 'text/Html' })
                res.write(htmlStr)
                break
            default :
                break
        }
    }else  if(req.method === 'POST'){}


    res.end();
})

app.listen(8080, () => {
    console.log('Sever is running on Port 8080')
})

function dealQuery(query) {
    // pn=1&ps=2
    const slice = query.split('&');
    // [ 'pn=1', 'ps=2' ]
    return slice.reduce((obj, item) => {
        const [key, value] = item.split('=')
        obj[key] = value
        return obj
    }, {});
}